/*
题目描述
现在要把 m 本有顺序的书分给 k 个人复制（抄写），每一个人的抄写速度都一样，一本书不允许给两个（或以上）的人抄写，分给每一个人的书，必须是连续的，比如不能把第一、第三、第四本书给同一个人抄写。

现在请你设计一种方案，使得复制时间最短。复制时间为抄写页数最多的人用去的时间。

输入格式
第一行两个整数 m,k。

第二行 m 个整数，第 i 个整数表示第 i 本书的页数。

输出格式
共 k 行，每行两个整数，第 i 行表示第 i 个人抄写的书的起始编号和终止编号。 k 行的起始编号应该从小到大排列，如果有多解，则尽可能让前面的人少抄写。
*/

#include<bits/stdc++.h>
#define endl "\n"
#define ll long long
#define all(rq) rq.begin(),rq.end()
#define max(a,b) (a<b?b:a)
#define min(a,b) (a<b?a:b)

using namespace std;
const int INF=0x3f3f3f3f;

int main(){
	int m,k;
	cin>>m>>k;
	
	vector<int> a(m+1);
	vector<int> s(m+1);
	for(int i=1;i<=m;i++){
		cin>>a[i];
		s[i]=s[i-1]+a[i];
	}
	
	vector<int> f(m+1,INF); //f[j]为前i个人复制j本书的最短时间 状态转移方程为f[i][j]=min(max(f[i-1][l],s[j]-s[l]))
	f[0]=0;
	for(int i=1;i<=k;i++){
		vector<int> temp=f;
		
		for(int j=0;j<=m;j++){
			
			int num=INF      ;
			for(int l=0;l<j;l++){
				num = min( num, max( temp[l], s[j]-s[l]));
			} 
			
			f[j]=num;
		}
	}
	
	int maxsize=f[m];
	vector<int> pos(k+1);
	int curr_pos=k-1;
	int curr=0;
	for(int i=m;i>0;i--){
		if(curr+a[i]<=maxsize){
			curr+=a[i];
		}else{
			curr=a[i];
			pos[curr_pos--]=i+1;
		}
	}
	pos[0]=1;
	pos[k]=m+1;
	for(int i=0;i<k;i++){
		cout<<pos[i]<<' '<<pos[i+1]-1<<endl;
	}

	return 0;
}